home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / msh-156.lha / han / hanreq.c < prev    next >
C/C++ Source or Header  |  1996-12-22  |  5KB  |  246 lines

  1. /*-
  2.  * $Id: hanreq.c,v 1.56 1996/12/22 00:22:33 Rhialto Rel $
  3.  * $Log: hanreq.c,v $
  4.  * Revision 1.56  1996/12/22  00:22:33  Rhialto
  5.  * Cosmetics only.
  6.  *
  7.  * Revision 1.55  1993/12/30  23:28:00    Rhialto
  8.  * Freeze for MAXON5.
  9.  *
  10.  * Revision 1.54  1993/06/24  05:12:49    Rhialto
  11.  * DICE 2.07.54R.
  12.  *
  13.  * Revision 1.53  92/10/25  02:42:27  Rhialto
  14.  * No real change.
  15.  *
  16.  * Revision 1.51  92/04/17  15:38:20  Rhialto
  17.  * Freeze for MAXON.
  18.  *
  19.  * Revision 1.46  91/10/06  18:25:03  Rhialto
  20.  *
  21.  * Freeze for MAXON
  22.  *
  23.  * Revision 1.45  91/10/04  00:12:06  Rhialto
  24.  * Add general information requester
  25.  *
  26.  * Revision 1.43  91/09/28  01:37:13  Rhialto
  27.  * Changed to newer syslog stuff.
  28.  *
  29.  * Revision 1.42  91/06/13  23:47:15  Rhialto
  30.  * DICE conversion
  31.  *
  32.  * Revision 1.40  91/03/03  17:54:07  Rhialto
  33.  * Freeze for MAXON
  34.  *
  35.  * Revision 1.32  90/11/23  23:53:42  Rhialto
  36.  * Prepare for syslog
  37.  *
  38.  * Revision 1.30  90/06/04  23:17:48  Rhialto
  39.  * Release 1 Patch 3
  40.  *
  41.  *  HANREQ.C
  42.  *
  43.  *  The code for the messydos file system handler.
  44.  *
  45.  *  Read/Write error requesters.
  46.  *
  47.  *  This code is (C) Copyright 1989-1993 by Olaf Seibert. All rights reserved.
  48.  *  May not be used or copied without a licence.
  49. -*/
  50.  
  51. #include "han.h"
  52. #include "dos.h"
  53.  
  54. #define IntuitionBase_DECLARED
  55.  
  56. #ifndef INTUITION_INTUITION_H
  57. #include <intuition/intuition.h>
  58. #endif
  59. #ifndef CLIB_INTUITION_PROTOS_H
  60. #include <clib/intuition_protos.h>
  61. #endif
  62.  
  63. extern struct IntuitionBase *IntuitionBase;
  64.  
  65. #if HDEBUG
  66. #   include "syslog.h"
  67. #else
  68. #   define    debug(x)
  69. #endif
  70.  
  71. Prototype short Cancel;     /* Cancel all R/W errors */
  72. Prototype long    RetryRwError(struct IOExtTD *req);
  73. Prototype void    DisplayMessage(char *msg);
  74. Local      struct Window *Getpr_WindowPtr(void);
  75.  
  76. short        Cancel = 0;    /* Cancel all R/W errors */
  77.  
  78. static const UBYTE retry[] = "Retry";
  79. static const UBYTE cancel[] = "Cancel";
  80.  
  81. static const struct IntuiText Positive = {
  82.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  83.     AUTOLEFTEDGE, AUTOTOPEDGE, AUTOITEXTFONT,
  84.     retry,
  85.     AUTONEXTTEXT
  86. };
  87.  
  88. static const struct IntuiText Negative = {
  89.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  90.     AUTOLEFTEDGE, AUTOTOPEDGE, AUTOITEXTFONT,
  91.     cancel,
  92.     AUTONEXTTEXT
  93. };
  94.  
  95. static const UBYTE volume[] = "Messydos volume";
  96. static const UBYTE hasrwerr[] = "has a Read or Write error";
  97.  
  98. static struct IntuiText RwError[] = {
  99.     {
  100.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  101.     16,          5,       AUTOITEXTFONT,
  102.     volume,
  103.     &RwError[1]
  104.     },
  105.     {
  106.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  107.     16,          15,       AUTOITEXTFONT,
  108.     (UBYTE *)NULL,
  109.     &RwError[2]
  110.     },
  111.     {
  112.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  113.     16,          25,       AUTOITEXTFONT,
  114.     hasrwerr,
  115.     NULL
  116.     },
  117. };
  118.  
  119. static const UBYTE must[] = "You MUST!! replace messy volume";
  120. static const UBYTE inthat[] = "in that floppy drive !!";
  121.  
  122. struct IntuiText MustReplace[] = {
  123.     {
  124.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  125.     16,          5,       AUTOITEXTFONT,
  126.     must,
  127.     &MustReplace[1]
  128.     },
  129.     {
  130.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  131.     16,          15,       AUTOITEXTFONT,
  132.     (UBYTE *)NULL,
  133.     &MustReplace[2]
  134.     },
  135.     {
  136.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  137.     16,          25,       AUTOITEXTFONT,
  138.     inthat,
  139.     NULL
  140.     },
  141. };
  142.  
  143. static struct Window *
  144. Getpr_WindowPtr()
  145. {
  146.     if (DosPacket != NULL) { /* A user-requested action */
  147.     struct MsgPort *port;
  148.     struct Process *proc;
  149.  
  150.     port = DosPacket->dp_Port;
  151.     if ((port->mp_Flags & PF_ACTION) != PA_SIGNAL)
  152.         return (struct Window *)-1;
  153.     proc = (struct Process *)port->mp_SigTask;
  154.     if (proc->pr_Task.tc_Node.ln_Type != NT_PROCESS)
  155.         return (struct Window *)-1;
  156.     return (struct Window *)proc->pr_WindowPtr;
  157.     } else
  158.     return NULL;
  159. }
  160.  
  161. long
  162. RetryRwError(req)
  163. struct IOExtTD *req;
  164. {
  165.     struct Window  *window;
  166.     struct IntuiText *text;
  167.     long        result;
  168.  
  169.     if (Cancel) {
  170.     debug(("RetryRwError: Cancel != 0\n"));
  171.     goto fail;
  172.     }
  173.  
  174.     window = Getpr_WindowPtr();
  175.     if (window == (struct Window *)-1) {
  176.     debug(("RetryRwError: pr_WindowPtr == -1\n"));
  177.     goto fail;
  178.     }
  179.  
  180.     if (req->iotd_Req.io_Error == TDERR_DiskChanged) {
  181.     text = MustReplace;
  182.     DiskChanged = 0;
  183.     } else
  184.     text = RwError;
  185.  
  186.     if (VolNode)
  187.     text[1].IText = (UBYTE *)BTOC(VolNode->dl_Name)+1;
  188.     else
  189.     text[1].IText = (UBYTE *)"";
  190.  
  191. again:
  192.     result = AutoRequest(window, text, &Positive, &Negative,
  193.              0L, 0L, 320L, 72L);
  194.  
  195.     if (req->iotd_Req.io_Error == TDERR_DiskChanged && result != FALSE) {
  196.     TDChangeNum();    /* Get new disk change number */
  197.     DiskChanged = 0;
  198.     }
  199.  
  200.     return result;
  201.  
  202. fail:
  203.     return FALSE;
  204. }
  205.  
  206. static const UBYTE ok[] = "Ok";
  207.  
  208. static const struct IntuiText Ok = {
  209.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  210.     AUTOLEFTEDGE, AUTOTOPEDGE, AUTOITEXTFONT,
  211.     ok,
  212.     AUTONEXTTEXT
  213. };
  214.  
  215. static struct IntuiText AnyMessage[] = {
  216.     {
  217.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  218.     16,          10,       AUTOITEXTFONT,
  219.     (UBYTE *)NULL,
  220.     &AnyMessage[1]
  221.     },
  222.     {
  223.     AUTOFRONTPEN, AUTOBACKPEN, AUTODRAWMODE,
  224.     16,          25,       AUTOITEXTFONT,
  225.     (UBYTE *)NULL,
  226.     NULL
  227.     }
  228. };
  229.  
  230. void
  231. DisplayMessage(msg)
  232. char        *msg;
  233. {
  234.     struct Window  *window;
  235.  
  236.     window = Getpr_WindowPtr();
  237.     if (window == (struct Window *)-1)
  238.     window = NULL;
  239.  
  240.     AnyMessage[0].IText = (UBYTE *)BTOC(DevNode->dn_Name) + 1;
  241.     AnyMessage[1].IText = msg;
  242.     (void) AutoRequest(window, AnyMessage, NULL, &Ok,
  243.                0L, 0L, 320L, 72L);
  244.  
  245. }
  246.